package com.reebake.ideal.workflow.service;

import java.io.File;
import java.util.Map;

/**
 * 工作流服务接口
 */
public interface WorkflowService {
    /**
     * 发布流程
     * @param deploymentName 名称
     * @param data 数据
     */
    void deploy(String deploymentName, File data);

    /**
     * 启动流程
     * @param processDefinitionKey 流程代码
     * @param variables 变量
     * @return 流程实例编号
     */
    String start(String processDefinitionKey, Map<String, Object> variables);

    /**
     * 完成
     * @param taskId 任务编号
     * @param localVariables 本地变量
     */
    void complete(String taskId, Map<String, Object> localVariables);

    /**
     * 废弃流程
     * @param processInstanceId 流程实例编号
     */
    void discard(String processInstanceId);

    /**
     * 撤回
     * @param processInstanceId 流程实例编号
     * @param assignee 当前操作人编号
     */
    public void withdraw(String processInstanceId, String assignee);

    /**
     * 驳回
     * @param taskId 任务编号
     * @param assignee 当前操作人编号
     * @param localVariables 本地变量
     */
    public void reject(String taskId, String assignee, Map<String, Object> localVariables);

    /**
     * 驳回到起点
     * @param taskId 任务编号
     * @param assignee 当前操作人
     * @param localVariables 本地变量
     */
    void rejectToFirst(String taskId, String assignee, Map<String, Object> localVariables);
}
